enum 提供我們的程式有更佳的可讀性,也能清楚的表現其中成員。
enum CompassPoint:String { //列舉的自定義型別
case North //各列舉定義
case South
case West
case East
}
var directionToHead = CompassPoint.West
又能省略成以下
var directionToHead: CompassPoint = .West
再使用 Switch 語句來搭配列舉值,利用 Switch 判斷 directionToHead 是哪個方向
switch directionToHead {
case .North:
print("Lots of planets have a north")
case .South:
print("Watch out for penguins")
case .East:
print("Where the sun rises")
case .West:
print("Where the skies are blue")
}
而 enum 也提供 raw value,在宣告 enum 成員時,就可透過 raw value 來指派特定的值。定義 enum 時需要宣告 raw value 型別,且裡面所有成員也需要是同一個型別。
enum WeekDay: Int {
case Monday = 1
case Tuesday = 2
case Wednesday = 3
case Thursday = 4
case Friday = 5
case Saturday = 6
case Sunday = 7
}
###Implicitly Assigned Raw Values 隱式指定的原始值
enum Planet2: Int {
case mercury = 1, venus, earth, mars, jupiter,saturn, uranus, neptune
}
以上的例子,Planet2.mercury 有個明確的 raw value 為 1; 則 Planet2.venus 則有個隱式的 raw value 為 2,以此類推。
###Associated Values 關聯值
關聯值提供動態設定的好處,保留之後指定值的彈性。
enum Barcode { //定義一個叫Barcode的列舉類型
case upc(Int, Int, Int, Int)
case qrCode(String)
}
var productBarcode = Barcode.upc(8, 85909, 51226,3)
productBarcode = .qrCode("ABCDEFGHIJKLMNOP")
switch productBarcode {
case .upc(let numberSystem, let manufacturer, let product, let check):
print("UPC: \(numberSystem), \(manufacturer), \(product), \(check)")
case .qrCode(let productCode):
print("QR Code: \(productCode)")
}